#include <iostream>
using namespace std;

const int MOD = 1e9 + 7;    // 题目要求的取模基数
int cnt[5005] = {0}, n;     // cnt数组统计各长度木棒出现次数
long long ans = 0;          // 最终答案（自动初始化为0）

int main() {
	cin >> n;
	// 读取输入并统计各长度数量
	for (int i = 0; i < n; i++) {
		int input;
		cin >> input;
		cnt[input]++;  // 对应长度计数+1
	}

	// 枚举等边三角形的边长a（至少需要2根相同木棒）
	for (int a = 2; a <= 5000; a++) {
		if (cnt[a] < 2) continue;  // 不足两根则跳过

		// 计算选择两根a木棒的方式数：C(cnt[a],2)
		long long select_a = 1LL * cnt[a] * (cnt[a] - 1) / 2;

		// 枚举第三条边的第一部分c（只需枚举到a/2避免重复计算）
		for (int c = 1; c <= a / 2; c++) {
			int d = a - c;  // 第三条边的第二部分

			if (d < 1) continue;  // 排除无效长度

			if (c == d) {  // 当两部分长度相同时
				// 需要至少2根c木棒：C(cnt[c],2)
				if (cnt[c] >= 2) {
					ans += select_a * cnt[c] * (cnt[c] - 1) / 2;
				}
			} else {  // 当两部分长度不同时
				// 需要至少1根c和1根d木棒：cnt[c] * cnt[d]
				if (cnt[c] && cnt[d]) {
					ans += select_a * cnt[c] * cnt[d];
				}
			}
			ans %= MOD;  // 每次操作后取模防止溢出
		}
	}

	cout << ans % MOD;  // 最后再取模确保结果正确
	return 0;
}

/*
	C(n,2)：
	这是一个组合数计算公式，表示从n个元素中选取2个元素的组合方式数
	
	公式含义：
	n：总元素个数
	n-1：选第一个元素后，剩余可选元素数
	/2：消除顺序带来的重复（比如选A和B，与选B和A算同一种情况）
*/